開始之前讓我們來先看一張圖。

這是今年三月的東京馬拉松,42.65 公里,跑了 3 小時 22 分。畫面上這條線是我的
GPS 軌跡,總共 12,128 個點——每一秒一個。線的顏色是配速,綠色是快,紅色是慢(爆掉啦~)。
前面三十公里都是漂亮的綠色,配速穩穩地待在 4 分半上下。然後你會看到左下角
那一段慢慢轉黃、轉橘,最後變成一條紅線,正是血淚的開始哈哈。
那是 35 公里之後。配速從 4:33 掉到 5:57,我的心率不但沒有上升,反而從 175
掉到 161——不是因為變輕鬆了,是因為已經推不動了QQ。
這張圖是我這 30 天的終點之一。讓我們好好地觀賞一下,因為接下來有好一陣子,畫面上
應該都是程式碼(咦
自己是個同時跑步和重訓的市民跑者。跑班有實體教練,一週見一次面,剩下六天的
自主訓練,教練其實看不到。
這件事本來也還好,教練經驗豐富,透過跑步紀錄大概能推測這禮拜狀態怎麼樣。真正
的問題是,當他問「你上週練得如何」,連我自己也常常答不清楚(慚愧)。
回答的吱吱嗚嗚,但情況是訓練資料散落在不同地方:
四個來源,四種格式,沒有一個能跟另一個對話。要回答「上週練得如何」,我得
自己在腦袋裡做 join。而人腦做 join 的結果,就是每次都只記得最近三天^0^
這套系統是自己在運動的過程中慢慢迭代出來。回頭看有五個
階段,每一階段都是需要時才加上去的:
第一階段:Google Keep 手抄。 最原始的版本。深蹲 60 公斤做了幾下,打開 Google
Keep 一字一字打。優點是零成本,缺點是三個月後想比較「我這個動作有沒有進步」,
只能一頁一頁打開來看。
第二階段:做成 Notion 自動同步。 把重訓紀錄結構化,動作、重量、組數、
次數各自一欄。這時候第一次感覺到「資料」跟「筆記」的差別——可以排序、可以
篩選、可以看趨勢了。
第三階段:接上 Garmin。 跑步資料量比重訓大好幾個量級,而且是機器產生的,
不用自己打字。這一步讓系統從「手工紀錄資料」變成「搜集現成的資料格式」。
第四階段:接上體重機。 這步有點意思。市售體重機大多需要消費者用官方 app、資料
上雲端再撈回來,但我後來發現小米那台其實會用藍牙 BLE 直接對外廣播體重數字,
不用經過任何雲端。所以就寫了個腳本站在旁邊聽(後面 Day 6 會講這個)。
第五階段:用 NotebookLM 組了一個 AI 助教。 把訓練紀錄、教練的課表、一些訓練的文獻
餵進去,讓它有背景知識可以回答我的問題。
系統長著長著,就長成現在這樣。能動,但也僅止於能動(聽君一席話)。
自己是前端工程師(快要消失的職業)。這套系統用了一陣子,藉由vibe coding的力量,
Telegram bot 也串起來了。
然後有一天我意識到一件事:這整套系統,唯一沒有的東西就是前端。
所有東西都躺在 GitHub 的 markdown 檔、Notion 的表格、跟 Telegram 的對話紀錄
裡。身為一個寫介面的人,這個個人專案,居然沒有一個畫面(問號)。
要看「這三個月體重的趨勢」,必須得打開 Notion 自己看那排數字。要知道「上一場
全馬到底是哪裡開始掉的」,我得把 CSV 丟進試算表拉圖。而要把這些東西拿去和
教練討論,只能截圖,然後打字解釋。
所以才有了這 30 天。
以及要還一下vibe coding的技術債(掩面)
小總結:把散落四處的訓練資料,變成一目了然就看得懂的視覺。

分成三個階段:
第一階段:資料管線(Day 1–10)
把四種資料撈進同一個地方。Garmin 的非官方 API 怎麼串(分享踩坑,被 IP 限流擋在門外)、
FIT 檔案的二進位格式怎麼拆、重訓紀錄怎麼從人類寫的文字變成機器讀得懂的結構。
第十天至少會先做出第一個看得見的畫面。
第二階段:讓資料會說話(Day 11–20)
資料齊了不代表能讓人看得懂。這階段要處理的是「翻譯」:把教練 LINE 裡的課表變成
機器可讀的計畫、比對「教練開的」跟「我實際跑的」算出達成率、用 ATL/CTL/TSB
模型看疲勞累積,最後自動產出一頁式週報。
這邊可以先澄清關於這個規劃:自己不打算做一個 AI 教練。
AI 取代不了能一下就看出跑步姿勢有沒有問題的教練。這邊要做的是橋樑——
讓 AI 當翻譯官,把原始資料整理成教練三十秒看得完的東西。第 19 天甚至會
寫「哪些問題不問 AI 、且要直接去問教練」。
第三階段:復盤與視覺化(Day 21–30)
回到開頭那張圖。全馬復盤怎麼看、心率飄移是什麼、WebSocket 怎麼做賽事回放
(把 FIT 資料按時間軸重播一次,像看比賽轉播那樣)、Three.js 怎麼把 GPS 軌跡
變成 3D,還有怎麼把配速跟心率映射成顏色。
最後一天,這套系統要能完整回答那個問題:我練得如何。
12 月 20 日是臺北馬拉松。
心中多少有一些目標成績——而在今年東京馬最後那一段路的紅線提醒著自己,一場全馬
需要更完善的準備,深入了解自己的狀態,選擇適合自己的策略。
30 天後可以藉由這個介面,幫助自己回答:我準備得怎麼樣。
那才是我想要的答案。
明天先從最基礎的開始:自己的跑步資料,散落在哪些地方,各自長什麼樣子。![]()